home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
CRS
/
crs47.d81
/
2400.sda
/
NEWMODEM.SRC
< prev
Wrap
Text File
|
2009-10-10
|
9KB
|
249 lines
1100 ;---------------------------------------------
1110 ; "NEWMODEM.SRC" - 64 MODE.
1120 ; @128 = CHANGES FOR 128 MODE.
1130 ;---------------------------------------------
1140 RIBUF =$F7 ;@128 $C8
1150 ROBUF =$F9 ;@128 $CA
1160 BAUDOF =$0299 ;@128 $0A16
1170 RIDBE =$029B ;@128 $0A18
1180 RIDBS =$029C ;@128 $0A19
1190 RODBS =$029D ;@128 $0A1A
1200 RODBE =$029E ;@128 $0A1B
1210 ENABL =$02A1 ;@128 $0A0F
1220 RSTKEY =$FE56 ;@128 $FA4B
1230 NOREST =$FE72 ;@128 $FA5F
1240 RETURN =$FEBC ;@128 $FF33
1250 OLDOUT =$F1CA ;@128 $EF79
1260 OLDCHK =$F21B ;@128 $F10E
1270 FINDFN =$F30F ;@128 $F202
1280 DEVNUM =$F31F ;@128 $F212
1290 NOFILE =$F701 ;@128 $F682
1500 ;---------------------------------------------
1510 * =$CE00 ;@128 $1A00
1520 ;---------------------------------------------
1530 XX00 JMP SETUP
1540 XX03 JMP INABLE
1550 XX06 JMP DISABL
1560 XX09 JMP RSGET
1570 XX0C JMP RSOUT
1580 NOP
1590 STRT24 .WORD $01CB ; 459 START-BIT TIMES
1600 STRT12 .WORD $0442 ;1090
1610 STRT03 .WORD $1333 ;4915
1620 FULL24 .WORD $01A5 ; 421 FULL-BIT TIMES
1630 FULL12 .WORD $034D ; 845
1640 FULL03 .WORD $0D52 ;3410
1650 ;---------------------------------------------
2000 SETUP LDA #<NMI64 ;@128 #<NMI128
2010 LDY #>NMI64 ;@128 #>NMI128
2020 STA $0318
2030 STY $0319
2040 LDA #<NCHKIN
2050 LDY #>NCHKIN
2060 STA $031E
2070 STY $031F
2080 LDA #<NBSOUT
2090 LDY #>NBSOUT
2100 STA $0326
2110 STY $0327
2120 RTS
2130 ;---------------------------------------------
3000 NMI64 PHA ;NEW NMI HANDLER
3010 TXA
3020 PHA
3030 TYA
3040 PHA
3050 NMI128 CLD
3060 LDX $DD07 ;SAMPLE TIMER B HI BYTE
3070 LDA #$7F ;DISABLE CIA NMI'S
3080 STA $DD0D
3090 LDA $DD0D ;READ/CLEAR FLAGS
3100 BPL NOTCIA ;(RESTORE KEY)
3110 CPX $DD07 ;TB TIMEOUT SINCE 3060?
3120 LDY $DD01 ;(SAMPLE PIN C)
3130 BCS MASK ;NO
3140 ORA #$02 ;YES, SET FLAG IN ACC.
3150 ORA $DD0D ;READ/CLEAR FLAGS AGAIN
3160 MASK AND ENABL ;MASK OUT NON-ENABLED
3170 TAX ;THESE MUST BE SERVICED
3180 LSR ;TIMER A? (BIT 0)
3190 BCC CKFLAG ;NO
3200 LDA $DD00 ;YES, PUT BIT ON PIN M
3210 AND #$FB
3220 ORA $B5
3230 STA $DD00
3240 CKFLAG TXA
3250 AND #$10 ;*FLAG NMI? (BIT 4)
3260 BEQ NMION ;NO
3270 STRTLO LDA #$42 ;YES, START-BIT TO TB
3280 STA $DD06
3290 STRTHI LDA #$04
3300 STA $DD07
3310 LDA #$11 ;START TB COUNTING
3320 STA $DD0F
3330 LDA #$12 ;*FLAG NMI OFF, TB ON
3340 EOR ENABL ;UPDATE MASK
3350 STA ENABL
3360 STA $DD0D ;ENABLE NEW CONFIG.
3370 FULLLO LDA #$4D ;CHANGE RELOAD LATCH
3380 STA $DD06 ; TO FULL-BIT TIME
3390 FULLHI LDA #$03
3400 STA $DD07
3410 LDA #$08 ;# OF BITS TO RECEIVE
3420 STA $A8
3430 BNE CHKTXD ;BRANCH ALWAYS
3440 NOTCIA LDY #$00
3450 JMP RSTKEY ;OR JMP NOREST
3460 NMION LDA ENABL ;RE-ENABLE NMI'S
3470 STA $DD0D
3480 TXA
3490 AND #$02 ;TIMER B? (BIT 1)
3500 BEQ CHKTXD ;NO
3510 TYA ;YES, SAMPLE FROM 3120
3520 LSR
3530 ROR $AA ;RS232 IS LSB FIRST
3540 DEC $A8 ;BYTE FINISHED?
3550 BNE TXD ;NO
3560 LDY RIDBE ;YES, BYTE TO BUFFER
3570 LDA $AA
3580 STA (RIBUF),Y ;(NO OVERRUN TEST)
3590 INC RIDBE
3600 LDA #$00 ;STOP TIMER B
3610 STA $DD0F
3620 LDA #$12 ;TB NMI OFF, *FLAG ON
3630 SWITCH LDY #$7F ;DISABLE NMI'S
3640 STY $DD0D ;TWICE
3650 STY $DD0D
3660 EOR ENABL ;UPDATE MASK
3670 STA ENABL
3680 STA $DD0D ;ENABLE NEW CONFIG.
3690 TXD TXA
3700 LSR ;TIMER A?
3710 CHKTXD BCC EXIT ;NO
3720 DEC $B4 ;YES, BYTE FINISHED?
3730 BMI CHAR ;YES
3740 LDA #$04 ;NO, PREP NEXT BIT
3750 ROR $B6 ;(FILL WITH STOP BITS)
3760 BCS STORE
3770 LOW LDA #$00
3780 STORE STA $B5
3790 EXIT JMP RETURN ;RESTORE REGS, RTI
3800 CHAR LDY RODBS
3810 CPY RODBE ;BUFFER EMPTY?
3820 BEQ TXOFF ;YES
3830 GETBUF LDA (ROBUF),Y ;NO, PREP NEXT BYTE
3840 INC RODBS
3850 STA $B6
3860 LDA #$09 ;# BITS TO SEND
3870 STA $B4
3880 BNE LOW ;ALWAYS - DO START BIT
3890 TXOFF LDX #$00 ;STOP TIMER A
3900 STX $DD0E
3910 LDA #$01 ;DISABLE TA NMI
3920 BNE SWITCH ;ALWAYS
3930 ;---------------------------------------------
4000 DISABL PHA ;TURNS OFF MODEM PORT
4010 TEST LDA ENABL
4020 AND #$03 ;ANY CURRENT ACTIVITY?
4030 BNE TEST ;YES, TEST AGAIN
4040 LDA #$10 ;NO, DISABLE *FLAG NMI
4050 STA $DD0D
4060 LDA #$02
4070 AND ENABL ;CURRENTLY RECEIVING?
4080 BNE TEST ;YES, START OVER
4090 STA ENABL ;ALL OFF, UPDATE MASK
4100 PLA
4110 RTS
4120 ;---------------------------------------------
5000 NBSOUT PHA ;NEW BSOUT
5010 LDA $9A
5020 CMP #$02
5030 BNE NOTMOD
5040 PLA
5050 RSOUT STA $9E ;OUTPUT TO MODEM
5060 STY $97
5070 POINT LDY RODBE
5080 STA (ROBUF),Y ;NOT OFFICIAL TILL 5120
5090 INY
5100 CPY RODBS ;BUFFER FULL?
5110 BEQ FULBUF ;YES
5120 STY RODBE ;NO, BUMP POINTER
5130 STRTUP LDA ENABL
5140 AND #$01 ;TRANSMITTING NOW?
5150 BNE RET3 ;YES
5160 STA $B5 ;NO, PREP START BIT,
5170 LDA #$09
5180 STA $B4 ; # BITS TO SEND,
5190 LDY RODBS
5200 LDA (ROBUF),Y
5210 STA $B6 ; AND NEXT BYTE
5220 INC RODBS
5230 LDA BAUDOF ;FULL TX BIT TIME TO TA
5240 STA $DD04
5250 LDA BAUDOF+1
5260 STA $DD05
5270 LDA #$11 ;START TIMER A
5280 STA $DD0E
5290 LDA #$81 ;ENABLE TA NMI
5300 CHANGE STA $DD0D ;NMI CLEARS FLAG IF SET
5310 PHP ;SAVE IRQ STATUS
5320 SEI ;DISABLE IRQ'S
5330 LDY #$7F ;DISABLE NMI'S
5340 STY $DD0D ;TWICE
5350 STY $DD0D
5360 ORA ENABL ;UPDATE MASK
5370 STA ENABL
5380 STA $DD0D ;ENABLE NEW CONFIG.
5390 PLP ;RESTORE IRQ STATUS
5400 RET3 CLC
5410 LDY $97
5420 LDA $9E
5430 RTS
5440 FULBUF JSR STRTUP
5450 JMP POINT
5460 NOTMOD PLA ;BACK TO OLD BSOUT
5470 JMP OLDOUT
5480 ;---------------------------------------------
6000 NCHKIN JSR FINDFN ;NEW CHKIN
6010 BNE NOSUCH
6020 JSR DEVNUM
6030 LDA $BA
6040 CMP #$02
6050 BNE BACK
6060 STA $99
6070 INABLE STA $9E ;ENABLE RS232 INPUT
6080 STY $97
6090 BAUD LDA BAUDOF+1 ;SET RECEIVE TO SAME
6100 AND #$06 ; BAUD RATE AS XMIT
6110 TAY
6120 LDA STRT24,Y
6130 STA STRTLO+1 ;OVERWRITE VALUE @ 3270
6140 LDA STRT24+1,Y
6150 STA STRTHI+1
6160 LDA FULL24,Y
6170 STA FULLLO+1
6180 LDA FULL24+1,Y
6190 STA FULLHI+1
6200 LDA ENABL
6210 AND #$12 ;*FLAG OR TB ON?
6220 BNE RET1 ;YES
6230 STA $DD0F ;NO, STOP TB
6240 LDA #$90 ;TURN ON FLAG NMI
6250 JMP CHANGE
6260 NOSUCH JMP NOFILE
6270 BACK LDA $BA
6280 JMP OLDCHK
6290 ;---------------------------------------------
7000 RSGET STA $9E ;INPUT FROM MODEM
7010 STY $97
7020 LDY RIDBS
7030 CPY RIDBE ;BUFFER EMPTY?
7040 BEQ RET2 ;YES
7050 LDA (RIBUF),Y ;NO, FETCH CHARACTER
7060 STA $9E
7070 INC RIDBS
7080 RET1 CLC ;CC = CHAR IN ACC.
7090 RET2 LDY $97
7100 LDA $9E
7110 LAST RTS ;CS = BUFFER WAS EMPTY